/*
 * @Author: JYJ 
 * @Date: 2020-07-11 22:09:10 
 * @Desc: 基于Protobuf的消息处理
 * @TODO 不知道TS有没有类似与C#的Attribute的东西，有的话可以自动生成包号做自动绑定，先手动写包号吧
 */
namespace gf {
    export class ProtobufMsg extends ByteArrayMsg {
        protected msgs: any;
        public constructor() {
            super()
            this.msgs = {};
        }
        public decode(msg: any): any {
            let byteArray = <egret.ByteArray>msg;
            let msgID = byteArray.readShort();
            let len = byteArray.readShort();
            if (byteArray.bytesAvailable >= len) {
                let msgBytes = new egret.ByteArray();
                byteArray.readBytes(msgBytes, 0, len);
                let msgParse = this.getMsgType(msgID)
                return msgParse(msgBytes.bytes, len);
            } else {
                return null;
            }
        }
        public encode(msgID: number, msg: any): any {
            let msgBody = new egret.ByteArray(msg);
            var sendMsg: egret.ByteArray = new egret.ByteArray();
            sendMsg.writeShort(msgID);
            sendMsg.writeShort(msgBody.length);
            sendMsg.writeBytes(msgBody);
            return sendMsg;
        }
        protected getMsgType(msgID: number) {
            return this.msgs[msgID];
        }
    }
}